function selectCareSitesToGeocode(selectedCareSiteIds) {

    debugger;
    //Define the Global Variables across functions.
    var bingMapsKey = 'AnMPbAuzGgURbEiN9H96j4mBiJo-JPk4fqMtkmfc6NEet28pqceuyiqk_kWrFD6x';
    var orgUrl = window.parent.Xrm.Page.context.getClientUrl();
    var webAPIUrl = "/api/data/v8.1/";
    var options =
        "?$select=ppms_name,ppms_address_line1,ppms_address_city,ppms_statename,ppms_address_postalcode,ppms_address_country,ppms_address_latitude,ppms_address_longitude&$filter=";
    var requestType = "ppms_caresites";

    for (var i = 0; i < selectedCareSiteIds.length; i++) {
        //Format the ID to remove braces
        var CareSiteId = selectedCareSiteIds[i].toString();
        CareSiteId = CareSiteId.replace(/[{}]/g, "");

        options += "(ppms_caresiteid eq " + CareSiteId + ")"
        if (i != selectedCareSiteIds.length - 1) {
            options += " or ";
        }
    }

    if (selectedCareSiteIds.length <= 250) {
        RetrieveCareSites(options);
    }
    else{return};


    function RetrieveCareSites(options) {

        var request = new String();

        request += orgUrl + webAPIUrl + requestType + options;

        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            datatype: "json",
            url: request,
            beforeSend: function(XMLHttpRequest) {
                //Specifying this header ensures that the results will be returned as JSON.             
                XMLHttpRequest.setRequestHeader("Accept", "application/json");
            },
            success: function(data, textStatus, xhr) {
                verifyGeocodeNeeded(data, textStatus, xhr);
            },
            error: function(e) {
                showErrorMsg(e.statusText);
            }
        });
    };

    function verifyGeocodeNeeded(data, textStatus, xhr) {
        var careSites = data.value;
        if (careSites.length > 0) {
            filteredCareSites = new Array();
            for (var p = 0; p < careSites.length; p++) {
                if (careSites[p].ppms_address_latitude == null && careSites[p].ppms_address_longitude == null) {
                    filteredCareSites.push(careSites[p])
                }
            }
            careSites = filteredCareSites
        }
        if (careSites.length > 0) {
            geoCodeCareSites(careSites)
        };
    };

    function geoCodeCareSites(careSites) {

        for (var p = 0; p < careSites.length; p++) {

            var careSiteId = careSites[p].ppms_caresiteid;

            var careSiteAddress = new String;
            //Skipping the Street Address for Test data as many of the Test Records have fake street names
            careSiteAddress += careSites[p].ppms_address_line1 + ", ";
            careSiteAddress += careSites[p].ppms_address_city + " ";
            careSiteAddress += careSites[p].ppms_statename + " ";
            careSiteAddress += careSites[p].ppms_address_postalcode;

            //Call the Bing Maps REST Services and provide the address which needs to be Geocoded. Returned Result will have the Lat & Long coordinates. 
            var geocodeRequest = "https://dev.virtualearth.net/REST/v1/Locations?q=" +
                encodeURIComponent(careSiteAddress) +
                "&key=" +
                encodeURIComponent(bingMapsKey);
            CallRestService(careSiteId, geocodeRequest);
        }
    }

    function CallRestService(careSiteId, geocodeRequest) {
        $.ajax({
            url: geocodeRequest,
            dataType: "jsonp",
            async: true,
            jsonp: "jsonp",
            success: function(r) {
                GeocodeCallBack(r, careSiteId);
            },
            error: function(e) {
                alert(e.statusText);
            }
        });
    }

    function GeocodeCallBack(result, careSiteId) {
        // Do something with the result
        var lat = result.resourceSets[0].resources[0].geocodePoints[0].coordinates[0];
        var long = result.resourceSets[0].resources[0].geocodePoints[0].coordinates[1];
        updateCareSiteCoordinates(lat, long, careSiteId);
    }

    function updateCareSiteCoordinates(lat, long, careSiteId) {
      
        var req = new XMLHttpRequest()
        req.open("PATCH",
            encodeURI(orgUrl + webAPIUrl + requestType + "(" + careSiteId + ")"),
            true);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");

        lat = lat.toString();
        long = long.toString();

        var body = JSON.stringify({         
            "ppms_address_latitude": lat,
            "ppms_address_longitude": long,
            "ppms_geocoded": true
        });
        req.send(body);
              
    };

}
